package dialect

import (
	"gorm.io/gorm"

	"code_gen/config"
	"code_gen/entity"
)

const (
	DialectDefault  = "default"
	DialectMysql    = "mysql"
	DialectPostgres = "postgres"
	DialectSqlite   = "sqlite"
	LangJava        = "java"
	LangGo          = "go"
)

// DialectMap 方言映射
var DialectMap = map[string]Dialect{}

// Dialect 方言接口
type Dialect interface {
	ConvertDataType(ctx *Context, langType, dataType string) string                                         // 数据库类型转换为语言类型
	GetDB(ctx *Context, ds *config.DataSource) (*gorm.DB, error)                                            // 获取数据库连接
	GetTableInfo(ctx *Context, ds *config.DataSource, db *gorm.DB, table string) (*entity.TableInfo, error) // 获取table信息 从数据库
}

// GetDialect 获取方言
func GetDialect(dialect string) Dialect {
	return DialectMap[dialect]
}

// RegisterDialect 注册方言
func RegisterDialect(dialect string, d Dialect) {
	DialectMap[dialect] = d
}
